{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# Script for developing the PAT2TM concordance\n",
        "This script demonstrates how the PAT2TM concordance is created, as described in the manuscript From technologies to markets: a concordance between patent and trademark classes.\n",
        "\n",
        "This script should be read and understood in relation with Figure 1 of the manuscript demonstrating a schematic summary of our approach."
      ],
      "metadata": {
        "id": "MUB1zBuX9Y1u"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Install necessary libraries\n",
        "!pip install nltk pandas numpy scikit-learn\n",
        "!pip install gensim"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 958
        },
        "id": "vrZkn8yZFKRM",
        "outputId": "5521e99b-f453-40b7-b5ab-cf70d1837b29"
      },
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Requirement already satisfied: nltk in /usr/local/lib/python3.11/dist-packages (3.9.1)\n",
            "Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (2.2.2)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (2.0.2)\n",
            "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (1.6.1)\n",
            "Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from nltk) (8.2.1)\n",
            "Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from nltk) (1.5.1)\n",
            "Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.11/dist-packages (from nltk) (2024.11.6)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from nltk) (4.67.1)\n",
            "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas) (2.9.0.post0)\n",
            "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.2)\n",
            "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.2)\n",
            "Requirement already satisfied: scipy>=1.6.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.16.0)\n",
            "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (3.6.0)\n",
            "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\n",
            "Collecting gensim\n",
            "  Downloading gensim-4.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (8.1 kB)\n",
            "Collecting numpy<2.0,>=1.18.5 (from gensim)\n",
            "  Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m61.0/61.0 kB\u001b[0m \u001b[31m4.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hCollecting scipy<1.14.0,>=1.7.0 (from gensim)\n",
            "  Downloading scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (60 kB)\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m60.6/60.6 kB\u001b[0m \u001b[31m4.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hRequirement already satisfied: smart-open>=1.8.1 in /usr/local/lib/python3.11/dist-packages (from gensim) (7.3.0.post1)\n",
            "Requirement already satisfied: wrapt in /usr/local/lib/python3.11/dist-packages (from smart-open>=1.8.1->gensim) (1.17.2)\n",
            "Downloading gensim-4.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26.7 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m26.7/26.7 MB\u001b[0m \u001b[31m70.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.3 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m18.3/18.3 MB\u001b[0m \u001b[31m92.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hDownloading scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.6 MB)\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m38.6/38.6 MB\u001b[0m \u001b[31m15.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hInstalling collected packages: numpy, scipy, gensim\n",
            "  Attempting uninstall: numpy\n",
            "    Found existing installation: numpy 2.0.2\n",
            "    Uninstalling numpy-2.0.2:\n",
            "      Successfully uninstalled numpy-2.0.2\n",
            "  Attempting uninstall: scipy\n",
            "    Found existing installation: scipy 1.16.0\n",
            "    Uninstalling scipy-1.16.0:\n",
            "      Successfully uninstalled scipy-1.16.0\n",
            "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
            "tsfresh 0.21.0 requires scipy>=1.14.0; python_version >= \"3.10\", but you have scipy 1.13.1 which is incompatible.\n",
            "opencv-python-headless 4.12.0.88 requires numpy<2.3.0,>=2; python_version >= \"3.9\", but you have numpy 1.26.4 which is incompatible.\n",
            "thinc 8.3.6 requires numpy<3.0.0,>=2.0.0, but you have numpy 1.26.4 which is incompatible.\n",
            "opencv-python 4.12.0.88 requires numpy<2.3.0,>=2; python_version >= \"3.9\", but you have numpy 1.26.4 which is incompatible.\n",
            "opencv-contrib-python 4.12.0.88 requires numpy<2.3.0,>=2; python_version >= \"3.9\", but you have numpy 1.26.4 which is incompatible.\u001b[0m\u001b[31m\n",
            "\u001b[0mSuccessfully installed gensim-4.3.3 numpy-1.26.4 scipy-1.13.1\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.colab-display-data+json": {
              "pip_warning": {
                "packages": [
                  "numpy"
                ]
              },
              "id": "55fab99e84b144f29b3352ac0c5d89a9"
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "import random\n",
        "import re\n",
        "import nltk\n",
        "from nltk.corpus import stopwords\n",
        "from nltk.stem import PorterStemmer\n",
        "\n",
        "from gensim.models import Doc2Vec\n",
        "from gensim.models.doc2vec import TaggedDocument\n",
        "from sklearn.preprocessing import LabelEncoder\n",
        "\n",
        "from sklearn.cluster import KMeans\n",
        "from sklearn.preprocessing import StandardScaler\n",
        "from sklearn.feature_extraction.text import CountVectorizer\n",
        "\n",
        "import networkx as nx\n",
        "import matplotlib.pyplot as plt"
      ],
      "metadata": {
        "id": "ObUw8MAc6hIS"
      },
      "execution_count": 1,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        " # Creating toy data\n",
        "Given the size of the original datasets, we create two toy datasets that mirrors the structure and content of the full data used in the paper. This allows for illustrating the key steps of our approach without requiring substantial computational resources. The same script, when scaled appropriately, can be applied to the full datasets to replicate the PAT2TM concordance."
      ],
      "metadata": {
        "id": "yQLmgH5k62nk"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "-FcQgsoI6KUh",
        "outputId": "1637e483-a5c5-441f-89f5-52f25fee424e"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   reference                                description  Nice_class\n",
              "0      69882     AI-powered energy forecasting software           9\n",
              "1      69883  Predictive maintenance analytics platform           9\n",
              "2      69884             Climate risk modeling software           9\n",
              "3      69885    Carbon footprint calculator application           9\n",
              "4      69886             Digital twin simulation engine           9"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-688549be-3081-4553-9dea-068a5e7d6fde\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>reference</th>\n",
              "      <th>description</th>\n",
              "      <th>Nice_class</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>69882</td>\n",
              "      <td>AI-powered energy forecasting software</td>\n",
              "      <td>9</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>69883</td>\n",
              "      <td>Predictive maintenance analytics platform</td>\n",
              "      <td>9</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>69884</td>\n",
              "      <td>Climate risk modeling software</td>\n",
              "      <td>9</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>69885</td>\n",
              "      <td>Carbon footprint calculator application</td>\n",
              "      <td>9</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>69886</td>\n",
              "      <td>Digital twin simulation engine</td>\n",
              "      <td>9</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-688549be-3081-4553-9dea-068a5e7d6fde')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-688549be-3081-4553-9dea-068a5e7d6fde button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-688549be-3081-4553-9dea-068a5e7d6fde');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-dfec037b-f1ab-4284-82cd-8838a19d4879\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-dfec037b-f1ab-4284-82cd-8838a19d4879')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-dfec037b-f1ab-4284-82cd-8838a19d4879 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "hdb_df",
              "summary": "{\n  \"name\": \"hdb_df\",\n  \"rows\": 20,\n  \"fields\": [\n    {\n      \"column\": \"reference\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 5,\n        \"min\": 69882,\n        \"max\": 69901,\n        \"num_unique_values\": 20,\n        \"samples\": [\n          69882,\n          69899,\n          69897\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"description\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 20,\n        \"samples\": [\n          \"AI-powered energy forecasting software\",\n          \"Emission tracking smart contract system\",\n          \"Blockchain-based product passport\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Nice_class\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0,\n        \"min\": 9,\n        \"max\": 9,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          9\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 2
        }
      ],
      "source": [
        "# -------------------------------------\n",
        "# Create toy HDB descriptions\n",
        "# -------------------------------------\n",
        "\n",
        "# The toy data includes goods descriptions resembling those found in Nice Class 9 (see Table 1 of the manuscript).\n",
        "hdb_data = {\n",
        "    \"reference\": list(range(69882, 69882 + 20)),\n",
        "    \"description\": [\n",
        "        \"AI-powered energy forecasting software\",\n",
        "        \"Predictive maintenance analytics platform\",\n",
        "        \"Climate risk modeling software\",\n",
        "        \"Carbon footprint calculator application\",\n",
        "        \"Digital twin simulation engine\",\n",
        "        \"IoT-enabled smart thermostat\",\n",
        "        \"Air pollution monitoring sensor\",\n",
        "        \"Connected irrigation controller\",\n",
        "        \"Remote energy monitoring device\",\n",
        "        \"Smart grid control interface\",\n",
        "        \"Eco-consumption tracking app\",\n",
        "        \"Carbon offset tracking software\",\n",
        "        \"Sustainability analytics dashboard\",\n",
        "        \"Green building design simulator\",\n",
        "        \"Circular economy planning tool\",\n",
        "        \"Blockchain-based product passport\",\n",
        "        \"Recycling record blockchain ledger\",\n",
        "        \"Emission tracking smart contract system\",\n",
        "        \"Carbon credit tokenization platform\",\n",
        "        \"Decentralized energy certification tool\"\n",
        "    ],\n",
        "    \"Nice_class\": [9] * 20\n",
        "}\n",
        "\n",
        "# Create DataFrame\n",
        "hdb_df = pd.DataFrame(hdb_data)\n",
        "\n",
        "# Show the first few rows\n",
        "hdb_df.head()"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Create toy patent texts\n",
        "# -------------------------------------\n",
        "nltk.download('stopwords')\n",
        "stop_words = set(stopwords.words('english'))\n",
        "stemmer = PorterStemmer()\n",
        "random.seed(123)\n",
        "\n",
        "# These ten codes are randomly generated and resemble those of the CPC tech classification at the 4-digit level.\n",
        "cpc_codes = [\"H01L\", \"A01B\", \"C07D\", \"F03D\", \"G01N\", \"B82Y\", \"E21B\", \"Y10S\", \"C25B\", \"B65D\"]\n",
        "\n",
        "# Create templates for generating patent texts.\n",
        "templates = [\n",
        "    # General methods and approaches\n",
        "    \"Method for\", \"Technique for\", \"Approach to\", \"Procedure for\", \"Process for\",\n",
        "    \"Framework for\", \"System for\", \"Architecture for\", \"Workflow for\",\n",
        "\n",
        "    # Machine learning / AI inspired\n",
        "    \"Deep learning approach for\", \"Reinforcement learning method for\",\n",
        "    \"AI-based system for\", \"Neural network model for\", \"Data-driven method for\",\n",
        "\n",
        "    # Innovation and novelty\n",
        "    \"A novel approach to\", \"An innovative solution for\", \"A unique framework for\",\n",
        "    \"An improved technique for\", \"A cutting-edge strategy for\",\n",
        "\n",
        "    # Technical / Engineering\n",
        "    \"Hardware-software co-design for\", \"Embedded system for\", \"Sensor-based method for\",\n",
        "    \"Control system for\", \"Dynamic model for\", \"Optimization framework for\",\n",
        "\n",
        "    # Environmental and sustainability\n",
        "    \"Green technology for\", \"Sustainable method for\", \"Eco-efficient system for\",\n",
        "    \"Low-emission approach to\", \"Carbon-neutral design for\",\n",
        "\n",
        "    # Operational / applied context\n",
        "    \"Application of\", \"Deployment strategy for\", \"Evaluation method for\",\n",
        "    \"Implementation of\", \"Field study on\", \"Case study of\",\n",
        "\n",
        "    # Abstract / conceptual\n",
        "    \"Conceptual model for\", \"Theoretical foundation of\", \"Taxonomy for\",\n",
        "    \"Paradigm for\", \"Interpretive framework for\",\n",
        "\n",
        "    # AI and digital systems\n",
        "    \"Algorithm for\", \"Model for\", \"Digital twin approach for\",\n",
        "    \"Simulation-based method for\", \"Predictive analytics for\", \"Real-time monitoring system for\"\n",
        "]\n",
        "\n",
        "\n",
        "def extract_phrase(desc):\n",
        "    words = desc.split()\n",
        "    if len(words) >= 2:\n",
        "        start = random.randint(0, len(words) - 2)\n",
        "        return \" \".join(words[start:start+2])\n",
        "    else:\n",
        "        return desc\n",
        "texts = []\n",
        "tech_codes = []\n",
        "\n",
        "for i in range(100):\n",
        "    desc = random.choice(hdb_df['description'])\n",
        "    phrase = extract_phrase(desc)\n",
        "    template = random.choice(templates)\n",
        "    sentence = f\"{template} {phrase}\"\n",
        "    texts.append(sentence)\n",
        "    tech_codes.append(random.choice(cpc_codes))\n",
        "\n",
        "patent_df = pd.DataFrame({\n",
        "    \"appln_id\": range(1, 101),\n",
        "    \"cpc_tech_code\": tech_codes,\n",
        "    \"text\": texts\n",
        "})\n",
        "\n",
        "# Presenting toy patent texts that resemble patent titles.\n",
        "# In our empirical setting, patent texts consist of patent titles and abstracts linked to unique patent identifiers (i.e., appln_id).\"\n",
        "patent_df.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 241
        },
        "id": "275eBv5f6-4N",
        "outputId": "99b17641-4173-41f6-d622-119f37e0e45e"
      },
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
            "[nltk_data]   Unzipping corpora/stopwords.zip.\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   appln_id cpc_tech_code                                               text\n",
              "0         1          E21B                Framework for maintenance analytics\n",
              "1         2          E21B                          Approach to Remote energy\n",
              "2         3          H01L             Sensor-based method for smart contract\n",
              "3         4          C25B          Sensor-based method for IoT-enabled smart\n",
              "4         5          H01L  Reinforcement learning method for Eco-consumpt..."
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-8d9ff6be-2372-46d9-a54c-46afd9c97ba9\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>appln_id</th>\n",
              "      <th>cpc_tech_code</th>\n",
              "      <th>text</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>E21B</td>\n",
              "      <td>Framework for maintenance analytics</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>2</td>\n",
              "      <td>E21B</td>\n",
              "      <td>Approach to Remote energy</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>3</td>\n",
              "      <td>H01L</td>\n",
              "      <td>Sensor-based method for smart contract</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4</td>\n",
              "      <td>C25B</td>\n",
              "      <td>Sensor-based method for IoT-enabled smart</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5</td>\n",
              "      <td>H01L</td>\n",
              "      <td>Reinforcement learning method for Eco-consumpt...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-8d9ff6be-2372-46d9-a54c-46afd9c97ba9')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-8d9ff6be-2372-46d9-a54c-46afd9c97ba9 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-8d9ff6be-2372-46d9-a54c-46afd9c97ba9');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-b3bba547-1325-4ca6-89ea-2677a1c6ff1a\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b3bba547-1325-4ca6-89ea-2677a1c6ff1a')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-b3bba547-1325-4ca6-89ea-2677a1c6ff1a button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "patent_df",
              "summary": "{\n  \"name\": \"patent_df\",\n  \"rows\": 100,\n  \"fields\": [\n    {\n      \"column\": \"appln_id\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 29,\n        \"min\": 1,\n        \"max\": 100,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          84,\n          54,\n          71\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"cpc_tech_code\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 10,\n        \"samples\": [\n          \"A01B\",\n          \"H01L\",\n          \"G01N\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 100,\n        \"samples\": [\n          \"Control system for smart thermostat\",\n          \"An improved technique for AI-powered energy\",\n          \"System for analytics dashboard\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 1. Text preprocessing\n",
        "\n"
      ],
      "metadata": {
        "id": "mQs4UPtR6zyc"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Text preprocessing\n",
        "# -------------------------------------\n",
        "def preprocess(text):\n",
        "    text = text.lower()\n",
        "    text = re.sub(r\"[^a-z\\s]\", \" \", text)\n",
        "    text = re.sub(r\"\\s+\", \" \", text)\n",
        "    text = \" \".join([stemmer.stem(w) for w in text.split() if w not in stop_words])\n",
        "    return text.strip()\n",
        "\n",
        "# General terms to remove\n",
        "general_terms = [\n",
        "    'contain', 'comprise','include', 'consist', 'configured', 'adapted', 'enable', 'enables',\n",
        "    'allow', 'facilitate', 'utilize', 'relate', 'such as', 'according to', 'for example', 'similar', 'like', 'namely',\n",
        "    'preferably', 'optionally', 'wherein', 'therewith', 'therefore', 'respective', 'respectively', 'thereof', 'thus', 'hence',\n",
        "    'such', 'based on', 'associated with', 'characterized by', 'effective for', 'capable of', 'in order to', 'may be',\n",
        "    'can be', 'prior art', 'aforementioned', 'etc', 'example', 'variant', 'method', 'apparatus', 'embodiment',\n",
        "    'application', 'preferred', 'object', 'objective'\n",
        "]\n",
        "\n",
        "pattern_terms = r'\\b(?:' + '|'.join(re.escape(term) for term in general_terms) + r')\\b'\n",
        "\n",
        "def clean_text(text):\n",
        "    text = preprocess(text)\n",
        "    text = re.sub(pattern_terms, '', text, flags=re.IGNORECASE)\n",
        "    text = re.sub(r\"\\s+\", \" \", text)\n",
        "    return text.strip()\n",
        "\n",
        "# Apply to toy HDB terms and patent text\n",
        "hdb_df[\"p_description\"] = hdb_df[\"description\"].apply(clean_text)\n",
        "patent_df[\"p_text\"] = patent_df[\"text\"].apply(clean_text)\n",
        "\n",
        "# Remove empty strings\n",
        "hdb_df = hdb_df[hdb_df[\"p_description\"].str.strip() != \"\"]\n",
        "patent_df = patent_df[patent_df[\"p_text\"].str.strip() != \"\"]\n",
        "\n",
        "print(\"Preprocessed HDB term Examples:\\n\", hdb_df[\"p_description\"].head(3))\n",
        "print(\"\\nPreprocessed patent text Example:\\n\", patent_df[\"p_text\"].head(3))\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "q0t8hXAQ6y8i",
        "outputId": "a10b4f18-4a0f-4912-9238-850632db2026"
      },
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Preprocessed HDB term Examples:\n",
            " 0    ai power energi forecast softwar\n",
            "1     predict mainten analyt platform\n",
            "2           climat risk model softwar\n",
            "Name: p_description, dtype: object\n",
            "\n",
            "Preprocessed patent text Example:\n",
            " 0      framework mainten analyt\n",
            "1         approach remot energi\n",
            "2    sensor base smart contract\n",
            "Name: p_text, dtype: object\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 2. Identifying Nice subclasses with semantic analysis"
      ],
      "metadata": {
        "id": "MKYUeOAK-BS7"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "def prepare_tokens(text):\n",
        "    \"\"\"\n",
        "    Convert preprocessed HDB terms to tokens for Doc2Vec\n",
        "    \"\"\"\n",
        "    if pd.isna(text):\n",
        "        return []\n",
        "\n",
        "    # If text is already tokenized (list), return as is\n",
        "    if isinstance(text, list):\n",
        "        return text\n",
        "\n",
        "    # If text is a string, split by whitespace\n",
        "    return str(text).split()\n",
        "\n",
        "def apply_doc2vec(df, text_column, vector_size=100, window=5, min_count=2, epochs=20):\n",
        "    \"\"\"\n",
        "    Apply Doc2Vec to a text column in a DataFrame\n",
        "    \"\"\"\n",
        "\n",
        "    print(f\"Preparing {len(df)} preprocessed documents...\")\n",
        "\n",
        "    # Prepare the preprocessed text data\n",
        "    processed_docs = []\n",
        "    for idx, text in enumerate(df[text_column]):\n",
        "        tokens = prepare_tokens(text)\n",
        "        if tokens:  # Only add non-empty documents\n",
        "            processed_docs.append(TaggedDocument(tokens, [idx]))\n",
        "\n",
        "    print(f\"Created {len(processed_docs)} tagged documents\")\n",
        "\n",
        "    # Initialize and train Doc2Vec model\n",
        "    print(\"Training Doc2Vec model...\")\n",
        "    model = Doc2Vec(\n",
        "        documents=processed_docs,\n",
        "        vector_size=vector_size,\n",
        "        window=window,\n",
        "        min_count=min_count,\n",
        "        workers=4,\n",
        "        epochs=epochs,\n",
        "        dm=1,\n",
        "        dm_mean=1,\n",
        "        alpha=0.025,\n",
        "        min_alpha=0.00025,\n",
        "        seed=42\n",
        "    )\n",
        "\n",
        "    print(\"Doc2Vec training completed!\")\n",
        "\n",
        "    # Extract document vectors\n",
        "    document_vectors = []\n",
        "    for i in range(len(df)):\n",
        "        try:\n",
        "            # Get vector for document with tag i\n",
        "            vector = model.dv[i]\n",
        "            document_vectors.append(vector)\n",
        "        except KeyError:\n",
        "            # If document wasn't included in training (empty after preprocessing)\n",
        "            document_vectors.append(np.zeros(vector_size))\n",
        "\n",
        "    # Convert to numpy array\n",
        "    document_vectors = np.array(document_vectors)\n",
        "\n",
        "    # Create DataFrame with vector columns\n",
        "    df_with_vectors = df.copy()\n",
        "\n",
        "    # Add vector columns to DataFrame\n",
        "    for i in range(vector_size):\n",
        "        df_with_vectors[f'doc2vec_dim_{i}'] = document_vectors[:, i]\n",
        "\n",
        "    print(f\"Added {vector_size} Doc2Vec dimensions to DataFrame\")\n",
        "\n",
        "    return model, document_vectors, df_with_vectors\n"
      ],
      "metadata": {
        "id": "DNHL7YpV-RPA"
      },
      "execution_count": 5,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Apply Doc2Vec to hdb_df\n",
        "print(\"Applying Doc2Vec to hdb_df['p_description']...\")\n",
        "\n",
        "# Check if the column exists\n",
        "if 'p_description' not in hdb_df.columns:\n",
        "    print(\"Error: 'p_description' column not found in hdb_df\")\n",
        "    print(\"Available columns:\", list(hdb_df.columns))\n",
        "else:\n",
        "    # Apply Doc2Vec\n",
        "    doc2vec_model, vectors, hdb_df_with_doc2vec = apply_doc2vec(\n",
        "        hdb_df,\n",
        "        'p_description',\n",
        "        vector_size=100,\n",
        "        window=5,\n",
        "        min_count=2,\n",
        "        epochs=20\n",
        "    )\n",
        "\n",
        "    # Display results\n",
        "    print(f\"\\nDoc2Vec Results:\")\n",
        "    print(f\"Original DataFrame shape: {hdb_df.shape}\")\n",
        "    print(f\"DataFrame with Doc2Vec shape: {hdb_df_with_doc2vec.shape}\")\n",
        "    print(f\"Document vectors shape: {vectors.shape}\")\n",
        "\n",
        "    # Show sample of the results\n",
        "    print(f\"\\nSample of Doc2Vec vectors:\")\n",
        "    print(f\"First document vector (first 10 dimensions):\")\n",
        "    print(vectors[0][:10])\n",
        "\n",
        "    # Show most similar documents example\n",
        "    print(f\"\\nFinding most similar documents to the first document:\")\n",
        "    similar_docs = doc2vec_model.dv.most_similar(0, topn=5)\n",
        "    for doc_id, similarity in similar_docs:\n",
        "        print(f\"Document {doc_id}: similarity = {similarity:.4f}\")\n",
        "        if doc_id < len(hdb_df):\n",
        "            print(f\"  Description: {str(hdb_df.iloc[doc_id]['p_description'])[:100]}...\")\n",
        "\n",
        "    # Save the model if needed\n",
        "    # doc2vec_model.save(\"doc2vec_model.model\")\n",
        "    print(\"\\nDoc2Vec application completed!\")\n",
        "    print(\"You can now use 'hdb_df_with_doc2vec' DataFrame which contains the original data plus Doc2Vec features\")\n",
        "    print(\"The trained model is stored in 'doc2vec_model' variable\")\n",
        "    print(\"The document vectors are stored in 'vectors' variable\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "HYYQ5blYE8XT",
        "outputId": "3d5ccf2c-0d17-4dff-c293-ea0fc5e307a1"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Applying Doc2Vec to hdb_df['p_description']...\n",
            "Preparing 20 preprocessed documents...\n",
            "Created 20 tagged documents\n",
            "Training Doc2Vec model...\n",
            "Doc2Vec training completed!\n",
            "Added 100 Doc2Vec dimensions to DataFrame\n",
            "\n",
            "Doc2Vec Results:\n",
            "Original DataFrame shape: (20, 4)\n",
            "DataFrame with Doc2Vec shape: (20, 104)\n",
            "Document vectors shape: (20, 100)\n",
            "\n",
            "Sample of Doc2Vec vectors:\n",
            "First document vector (first 10 dimensions):\n",
            "[ 0.00799149  0.0093677   0.00799546 -0.0076511  -0.00846395 -0.00453792\n",
            " -0.00429105  0.0046174  -0.00666471 -0.00843579]\n",
            "\n",
            "Finding most similar documents to the first document:\n",
            "Document 12: similarity = 0.0992\n",
            "  Description: sustain analyt dashboard...\n",
            "Document 14: similarity = 0.0866\n",
            "  Description: circular economi plan tool...\n",
            "Document 2: similarity = 0.0613\n",
            "  Description: climat risk model softwar...\n",
            "Document 8: similarity = 0.0374\n",
            "  Description: remot energi monitor devic...\n",
            "Document 3: similarity = -0.0017\n",
            "  Description: carbon footprint calcul applic...\n",
            "\n",
            "Doc2Vec application completed!\n",
            "You can now use 'hdb_df_with_doc2vec' DataFrame which contains the original data plus Doc2Vec features\n",
            "The trained model is stored in 'doc2vec_model' variable\n",
            "The document vectors are stored in 'vectors' variable\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/tmp/ipython-input-5-2746617407.py:68: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
            "  df_with_vectors[f'doc2vec_dim_{i}'] = document_vectors[:, i]\n",
            "/tmp/ipython-input-5-2746617407.py:68: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
            "  df_with_vectors[f'doc2vec_dim_{i}'] = document_vectors[:, i]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "hdb_df_with_doc2vec.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 481
        },
        "id": "g6ZhcPC9FpxK",
        "outputId": "95eb0233-d936-43cf-ff4a-c3fef281e5e2"
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   reference                                description  Nice_class  \\\n",
              "0      69882     AI-powered energy forecasting software           9   \n",
              "1      69883  Predictive maintenance analytics platform           9   \n",
              "2      69884             Climate risk modeling software           9   \n",
              "3      69885    Carbon footprint calculator application           9   \n",
              "4      69886             Digital twin simulation engine           9   \n",
              "\n",
              "                      p_description  doc2vec_dim_0  doc2vec_dim_1  \\\n",
              "0  ai power energi forecast softwar       0.007991       0.009368   \n",
              "1   predict mainten analyt platform      -0.002145      -0.007295   \n",
              "2         climat risk model softwar       0.006868      -0.001378   \n",
              "3    carbon footprint calcul applic       0.003228      -0.002249   \n",
              "4            digit twin simul engin      -0.002583       0.004069   \n",
              "\n",
              "   doc2vec_dim_2  doc2vec_dim_3  doc2vec_dim_4  doc2vec_dim_5  ...  \\\n",
              "0       0.007995      -0.007651      -0.008464      -0.004538  ...   \n",
              "1       0.004469       0.008798       0.009388       0.008979  ...   \n",
              "2       0.005793      -0.007902       0.002668      -0.003376  ...   \n",
              "3       0.006640       0.004949      -0.008782       0.009407  ...   \n",
              "4      -0.000995       0.009601      -0.006268      -0.008149  ...   \n",
              "\n",
              "   doc2vec_dim_90  doc2vec_dim_91  doc2vec_dim_92  doc2vec_dim_93  \\\n",
              "0        0.005577       -0.002584       -0.000147        0.009042   \n",
              "1        0.001791       -0.000134        0.007219       -0.002856   \n",
              "2       -0.000512        0.007307        0.001800        0.000318   \n",
              "3        0.003000       -0.009274       -0.009682        0.000496   \n",
              "4       -0.009951        0.005507        0.007272        0.001818   \n",
              "\n",
              "   doc2vec_dim_94  doc2vec_dim_95  doc2vec_dim_96  doc2vec_dim_97  \\\n",
              "0        0.000787        0.008413       -0.003564       -0.000252   \n",
              "1       -0.006678        0.005675        0.004200       -0.008484   \n",
              "2       -0.000343       -0.007135       -0.000329        0.004148   \n",
              "3        0.007244        0.008242       -0.000129        0.006366   \n",
              "4        0.008385       -0.005321        0.009158        0.007644   \n",
              "\n",
              "   doc2vec_dim_98  doc2vec_dim_99  \n",
              "0       -0.000736       -0.003851  \n",
              "1       -0.001637        0.009845  \n",
              "2        0.008194       -0.000313  \n",
              "3       -0.002686       -0.004829  \n",
              "4        0.005919       -0.000487  \n",
              "\n",
              "[5 rows x 104 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-d0514692-c662-4f1e-9978-a2d264e2ae77\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>reference</th>\n",
              "      <th>description</th>\n",
              "      <th>Nice_class</th>\n",
              "      <th>p_description</th>\n",
              "      <th>doc2vec_dim_0</th>\n",
              "      <th>doc2vec_dim_1</th>\n",
              "      <th>doc2vec_dim_2</th>\n",
              "      <th>doc2vec_dim_3</th>\n",
              "      <th>doc2vec_dim_4</th>\n",
              "      <th>doc2vec_dim_5</th>\n",
              "      <th>...</th>\n",
              "      <th>doc2vec_dim_90</th>\n",
              "      <th>doc2vec_dim_91</th>\n",
              "      <th>doc2vec_dim_92</th>\n",
              "      <th>doc2vec_dim_93</th>\n",
              "      <th>doc2vec_dim_94</th>\n",
              "      <th>doc2vec_dim_95</th>\n",
              "      <th>doc2vec_dim_96</th>\n",
              "      <th>doc2vec_dim_97</th>\n",
              "      <th>doc2vec_dim_98</th>\n",
              "      <th>doc2vec_dim_99</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>69882</td>\n",
              "      <td>AI-powered energy forecasting software</td>\n",
              "      <td>9</td>\n",
              "      <td>ai power energi forecast softwar</td>\n",
              "      <td>0.007991</td>\n",
              "      <td>0.009368</td>\n",
              "      <td>0.007995</td>\n",
              "      <td>-0.007651</td>\n",
              "      <td>-0.008464</td>\n",
              "      <td>-0.004538</td>\n",
              "      <td>...</td>\n",
              "      <td>0.005577</td>\n",
              "      <td>-0.002584</td>\n",
              "      <td>-0.000147</td>\n",
              "      <td>0.009042</td>\n",
              "      <td>0.000787</td>\n",
              "      <td>0.008413</td>\n",
              "      <td>-0.003564</td>\n",
              "      <td>-0.000252</td>\n",
              "      <td>-0.000736</td>\n",
              "      <td>-0.003851</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>69883</td>\n",
              "      <td>Predictive maintenance analytics platform</td>\n",
              "      <td>9</td>\n",
              "      <td>predict mainten analyt platform</td>\n",
              "      <td>-0.002145</td>\n",
              "      <td>-0.007295</td>\n",
              "      <td>0.004469</td>\n",
              "      <td>0.008798</td>\n",
              "      <td>0.009388</td>\n",
              "      <td>0.008979</td>\n",
              "      <td>...</td>\n",
              "      <td>0.001791</td>\n",
              "      <td>-0.000134</td>\n",
              "      <td>0.007219</td>\n",
              "      <td>-0.002856</td>\n",
              "      <td>-0.006678</td>\n",
              "      <td>0.005675</td>\n",
              "      <td>0.004200</td>\n",
              "      <td>-0.008484</td>\n",
              "      <td>-0.001637</td>\n",
              "      <td>0.009845</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>69884</td>\n",
              "      <td>Climate risk modeling software</td>\n",
              "      <td>9</td>\n",
              "      <td>climat risk model softwar</td>\n",
              "      <td>0.006868</td>\n",
              "      <td>-0.001378</td>\n",
              "      <td>0.005793</td>\n",
              "      <td>-0.007902</td>\n",
              "      <td>0.002668</td>\n",
              "      <td>-0.003376</td>\n",
              "      <td>...</td>\n",
              "      <td>-0.000512</td>\n",
              "      <td>0.007307</td>\n",
              "      <td>0.001800</td>\n",
              "      <td>0.000318</td>\n",
              "      <td>-0.000343</td>\n",
              "      <td>-0.007135</td>\n",
              "      <td>-0.000329</td>\n",
              "      <td>0.004148</td>\n",
              "      <td>0.008194</td>\n",
              "      <td>-0.000313</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>69885</td>\n",
              "      <td>Carbon footprint calculator application</td>\n",
              "      <td>9</td>\n",
              "      <td>carbon footprint calcul applic</td>\n",
              "      <td>0.003228</td>\n",
              "      <td>-0.002249</td>\n",
              "      <td>0.006640</td>\n",
              "      <td>0.004949</td>\n",
              "      <td>-0.008782</td>\n",
              "      <td>0.009407</td>\n",
              "      <td>...</td>\n",
              "      <td>0.003000</td>\n",
              "      <td>-0.009274</td>\n",
              "      <td>-0.009682</td>\n",
              "      <td>0.000496</td>\n",
              "      <td>0.007244</td>\n",
              "      <td>0.008242</td>\n",
              "      <td>-0.000129</td>\n",
              "      <td>0.006366</td>\n",
              "      <td>-0.002686</td>\n",
              "      <td>-0.004829</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>69886</td>\n",
              "      <td>Digital twin simulation engine</td>\n",
              "      <td>9</td>\n",
              "      <td>digit twin simul engin</td>\n",
              "      <td>-0.002583</td>\n",
              "      <td>0.004069</td>\n",
              "      <td>-0.000995</td>\n",
              "      <td>0.009601</td>\n",
              "      <td>-0.006268</td>\n",
              "      <td>-0.008149</td>\n",
              "      <td>...</td>\n",
              "      <td>-0.009951</td>\n",
              "      <td>0.005507</td>\n",
              "      <td>0.007272</td>\n",
              "      <td>0.001818</td>\n",
              "      <td>0.008385</td>\n",
              "      <td>-0.005321</td>\n",
              "      <td>0.009158</td>\n",
              "      <td>0.007644</td>\n",
              "      <td>0.005919</td>\n",
              "      <td>-0.000487</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>5 rows × 104 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d0514692-c662-4f1e-9978-a2d264e2ae77')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-d0514692-c662-4f1e-9978-a2d264e2ae77 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-d0514692-c662-4f1e-9978-a2d264e2ae77');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-7e661d66-1e6d-423e-bb8a-c34c8ade78f1\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-7e661d66-1e6d-423e-bb8a-c34c8ade78f1')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-7e661d66-1e6d-423e-bb8a-c34c8ade78f1 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "hdb_df_with_doc2vec"
            }
          },
          "metadata": {},
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Set random seed for reproducibility\n",
        "np.random.seed(123)\n",
        "\n",
        "# Select doc2vec feature columns\n",
        "vec_columns = [col for col in hdb_df_with_doc2vec.columns if \"_dim_\" in col]\n",
        "X = hdb_df_with_doc2vec[vec_columns]"
      ],
      "metadata": {
        "id": "Wn_utvzIGNOX"
      },
      "execution_count": 8,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Note that in the empirical setting, we iteratively ran KMeans clustering\n",
        "# with K ranging between 2 and 30. To specify the number of clusters for each Nice class,\n",
        "# we used the information on the sum of squared distances, known as the elbow method.\n",
        "# In other words, we plotted the explained variation against the number of clusters\n",
        "# and selected the point where the curve shows a significant bend to determine\n",
        "# the optimal number of clusters.\n",
        "# Given the small number of HDB terms we have in the toy data, we assume that 6 is the optimal number for K.\n",
        "# -------------------------------------\n",
        "\n",
        "# Replace with your chosen k\n",
        "optimal_k = 6\n",
        "\n",
        "kmeans = KMeans(n_clusters=optimal_k, random_state=42, n_init=10)\n",
        "hdb_df_with_doc2vec['Cluster'] = kmeans.fit_predict(X)"
      ],
      "metadata": {
        "id": "y0baN8iIHU1G",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "1fad0e46-b424-4780-8591-800b3c1ce2ec"
      },
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/tmp/ipython-input-9-855972535.py:15: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
            "  hdb_df_with_doc2vec['Cluster'] = kmeans.fit_predict(X)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "nice_class = hdb_df_with_doc2vec['Nice_class'].unique()[0]\n",
        "num_unique_clusters = hdb_df_with_doc2vec['Cluster'].nunique()\n",
        "cluster_share = hdb_df_with_doc2vec['Cluster'].value_counts(normalize=True)\n",
        "\n",
        "# Create the Nice_subclass variable\n",
        "# We assigned each Nice subclass a code that includes:the Nice class number, the subclass’s sequence\n",
        "# number out of the total subclasses in that class, and the relative size of the subclass.\n",
        "hdb_df_with_doc2vec['Nice_subclass'] = hdb_df_with_doc2vec.apply(\n",
        "    lambda row: f\"{nice_class}_{row['Cluster'] + 1}/{num_unique_clusters}_{cluster_share[row['Cluster']]:.2f}\",\n",
        "    axis=1\n",
        ")\n",
        "\n",
        "# Preview the clustered data\n",
        "hdb_df_with_doc2vec[['Nice_class', 'reference', 'description', 'p_description', 'Cluster', 'Nice_subclass']].head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 296
        },
        "id": "lveMo9yzdQxr",
        "outputId": "650d2a92-3a14-4e0b-ff2c-101b4a00c679"
      },
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/tmp/ipython-input-10-3295644028.py:8: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
            "  hdb_df_with_doc2vec['Nice_subclass'] = hdb_df_with_doc2vec.apply(\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   Nice_class  reference                                description  \\\n",
              "0           9      69882     AI-powered energy forecasting software   \n",
              "1           9      69883  Predictive maintenance analytics platform   \n",
              "2           9      69884             Climate risk modeling software   \n",
              "3           9      69885    Carbon footprint calculator application   \n",
              "4           9      69886             Digital twin simulation engine   \n",
              "\n",
              "                      p_description  Cluster Nice_subclass  \n",
              "0  ai power energi forecast softwar        2    9_3/6_0.15  \n",
              "1   predict mainten analyt platform        1    9_2/6_0.15  \n",
              "2         climat risk model softwar        2    9_3/6_0.15  \n",
              "3    carbon footprint calcul applic        0    9_1/6_0.40  \n",
              "4            digit twin simul engin        5    9_6/6_0.15  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-c126510c-b6f1-4432-9dae-bce16bf229a9\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Nice_class</th>\n",
              "      <th>reference</th>\n",
              "      <th>description</th>\n",
              "      <th>p_description</th>\n",
              "      <th>Cluster</th>\n",
              "      <th>Nice_subclass</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>9</td>\n",
              "      <td>69882</td>\n",
              "      <td>AI-powered energy forecasting software</td>\n",
              "      <td>ai power energi forecast softwar</td>\n",
              "      <td>2</td>\n",
              "      <td>9_3/6_0.15</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>9</td>\n",
              "      <td>69883</td>\n",
              "      <td>Predictive maintenance analytics platform</td>\n",
              "      <td>predict mainten analyt platform</td>\n",
              "      <td>1</td>\n",
              "      <td>9_2/6_0.15</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>9</td>\n",
              "      <td>69884</td>\n",
              "      <td>Climate risk modeling software</td>\n",
              "      <td>climat risk model softwar</td>\n",
              "      <td>2</td>\n",
              "      <td>9_3/6_0.15</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>9</td>\n",
              "      <td>69885</td>\n",
              "      <td>Carbon footprint calculator application</td>\n",
              "      <td>carbon footprint calcul applic</td>\n",
              "      <td>0</td>\n",
              "      <td>9_1/6_0.40</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>9</td>\n",
              "      <td>69886</td>\n",
              "      <td>Digital twin simulation engine</td>\n",
              "      <td>digit twin simul engin</td>\n",
              "      <td>5</td>\n",
              "      <td>9_6/6_0.15</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-c126510c-b6f1-4432-9dae-bce16bf229a9')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-c126510c-b6f1-4432-9dae-bce16bf229a9 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-c126510c-b6f1-4432-9dae-bce16bf229a9');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-2dccc723-440f-44b7-8b39-bea00ff57e69\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-2dccc723-440f-44b7-8b39-bea00ff57e69')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-2dccc723-440f-44b7-8b39-bea00ff57e69 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"hdb_df_with_doc2vec[['Nice_class', 'reference', 'description', 'p_description', 'Cluster', 'Nice_subclass']]\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"Nice_class\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0,\n        \"min\": 9,\n        \"max\": 9,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          9\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"reference\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1,\n        \"min\": 69882,\n        \"max\": 69886,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          69883\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"description\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"Predictive maintenance analytics platform\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"p_description\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"predict mainten analyt platform\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Cluster\",\n      \"properties\": {\n        \"dtype\": \"int32\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          1\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Nice_subclass\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"9_2/6_0.15\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 3. Bigram search of Nice subclasses in patent titles"
      ],
      "metadata": {
        "id": "1sl9nj14-RuH"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Creating bigrams of preprocessed HDB terms\n",
        "# -------------------------------------\n",
        "\n",
        "# Extract relevant columns\n",
        "df = hdb_df_with_doc2vec[['reference', 'description', 'p_description', 'Nice_subclass']].copy()\n",
        "\n",
        "# Tokenize and extract bigrams per row\n",
        "hdb_bigram_df = []\n",
        "\n",
        "for idx, row in df.iterrows():\n",
        "    words = row['p_description'].split()\n",
        "    bigrams = [' '.join(pair) for pair in zip(words, words[1:])]\n",
        "    for bigram_id, bigram in enumerate(bigrams):\n",
        "        hdb_bigram_df.append({\n",
        "            'reference': row['reference'],\n",
        "            'description': row['description'],\n",
        "            'p_description': row['p_description'],\n",
        "            'Nice_subclass': row['Nice_subclass'],\n",
        "            'bigram_id': bigram_id,\n",
        "            'bigram': bigram\n",
        "        })\n",
        "\n",
        "# Create new DataFrame\n",
        "hdb_bigram_df = pd.DataFrame(hdb_bigram_df)\n",
        "\n",
        "# Preview the result\n",
        "hdb_bigram_df.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 292
        },
        "id": "uwgAQYX6-j1Q",
        "outputId": "123ef579-7808-425e-e473-87e3d67b18be"
      },
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   reference                                description  \\\n",
              "0      69882     AI-powered energy forecasting software   \n",
              "1      69882     AI-powered energy forecasting software   \n",
              "2      69882     AI-powered energy forecasting software   \n",
              "3      69882     AI-powered energy forecasting software   \n",
              "4      69883  Predictive maintenance analytics platform   \n",
              "\n",
              "                      p_description Nice_subclass  bigram_id            bigram  \n",
              "0  ai power energi forecast softwar    9_3/6_0.15          0          ai power  \n",
              "1  ai power energi forecast softwar    9_3/6_0.15          1      power energi  \n",
              "2  ai power energi forecast softwar    9_3/6_0.15          2   energi forecast  \n",
              "3  ai power energi forecast softwar    9_3/6_0.15          3  forecast softwar  \n",
              "4   predict mainten analyt platform    9_2/6_0.15          0   predict mainten  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-2f3bd0ea-6ded-4dec-a829-14f2c1da2f7a\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>reference</th>\n",
              "      <th>description</th>\n",
              "      <th>p_description</th>\n",
              "      <th>Nice_subclass</th>\n",
              "      <th>bigram_id</th>\n",
              "      <th>bigram</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>69882</td>\n",
              "      <td>AI-powered energy forecasting software</td>\n",
              "      <td>ai power energi forecast softwar</td>\n",
              "      <td>9_3/6_0.15</td>\n",
              "      <td>0</td>\n",
              "      <td>ai power</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>69882</td>\n",
              "      <td>AI-powered energy forecasting software</td>\n",
              "      <td>ai power energi forecast softwar</td>\n",
              "      <td>9_3/6_0.15</td>\n",
              "      <td>1</td>\n",
              "      <td>power energi</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>69882</td>\n",
              "      <td>AI-powered energy forecasting software</td>\n",
              "      <td>ai power energi forecast softwar</td>\n",
              "      <td>9_3/6_0.15</td>\n",
              "      <td>2</td>\n",
              "      <td>energi forecast</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>69882</td>\n",
              "      <td>AI-powered energy forecasting software</td>\n",
              "      <td>ai power energi forecast softwar</td>\n",
              "      <td>9_3/6_0.15</td>\n",
              "      <td>3</td>\n",
              "      <td>forecast softwar</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>69883</td>\n",
              "      <td>Predictive maintenance analytics platform</td>\n",
              "      <td>predict mainten analyt platform</td>\n",
              "      <td>9_2/6_0.15</td>\n",
              "      <td>0</td>\n",
              "      <td>predict mainten</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-2f3bd0ea-6ded-4dec-a829-14f2c1da2f7a')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-2f3bd0ea-6ded-4dec-a829-14f2c1da2f7a button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-2f3bd0ea-6ded-4dec-a829-14f2c1da2f7a');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-b21718f0-25f6-42b4-9323-b6d8c8254860\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b21718f0-25f6-42b4-9323-b6d8c8254860')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-b21718f0-25f6-42b4-9323-b6d8c8254860 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "hdb_bigram_df",
              "summary": "{\n  \"name\": \"hdb_bigram_df\",\n  \"rows\": 60,\n  \"fields\": [\n    {\n      \"column\": \"reference\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 6,\n        \"min\": 69882,\n        \"max\": 69901,\n        \"num_unique_values\": 20,\n        \"samples\": [\n          69882,\n          69899,\n          69897\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"description\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 20,\n        \"samples\": [\n          \"AI-powered energy forecasting software\",\n          \"Emission tracking smart contract system\",\n          \"Blockchain-based product passport\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"p_description\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 20,\n        \"samples\": [\n          \"ai power energi forecast softwar\",\n          \"emiss track smart contract system\",\n          \"blockchain base product passport\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Nice_subclass\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"9_3/6_0.15\",\n          \"9_2/6_0.15\",\n          \"9_5/6_0.10\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"bigram_id\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0,\n        \"min\": 0,\n        \"max\": 3,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          1,\n          3,\n          0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"bigram\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 60,\n        \"samples\": [\n          \"ai power\",\n          \"mainten analyt\",\n          \"sustain analyt\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 11
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "patent_df.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "KNYKlAuOOdlx",
        "outputId": "b9114d51-adbc-415f-b0b3-7c49e51d31ed"
      },
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   appln_id cpc_tech_code                                               text  \\\n",
              "0         1          E21B                Framework for maintenance analytics   \n",
              "1         2          E21B                          Approach to Remote energy   \n",
              "2         3          H01L             Sensor-based method for smart contract   \n",
              "3         4          C25B          Sensor-based method for IoT-enabled smart   \n",
              "4         5          H01L  Reinforcement learning method for Eco-consumpt...   \n",
              "\n",
              "                              p_text  \n",
              "0           framework mainten analyt  \n",
              "1              approach remot energi  \n",
              "2         sensor base smart contract  \n",
              "3        sensor base iot enabl smart  \n",
              "4  reinforc learn eco consumpt track  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-27d1f645-10a5-4ef3-8d5e-044f94b651f6\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>appln_id</th>\n",
              "      <th>cpc_tech_code</th>\n",
              "      <th>text</th>\n",
              "      <th>p_text</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>E21B</td>\n",
              "      <td>Framework for maintenance analytics</td>\n",
              "      <td>framework mainten analyt</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>2</td>\n",
              "      <td>E21B</td>\n",
              "      <td>Approach to Remote energy</td>\n",
              "      <td>approach remot energi</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>3</td>\n",
              "      <td>H01L</td>\n",
              "      <td>Sensor-based method for smart contract</td>\n",
              "      <td>sensor base smart contract</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4</td>\n",
              "      <td>C25B</td>\n",
              "      <td>Sensor-based method for IoT-enabled smart</td>\n",
              "      <td>sensor base iot enabl smart</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5</td>\n",
              "      <td>H01L</td>\n",
              "      <td>Reinforcement learning method for Eco-consumpt...</td>\n",
              "      <td>reinforc learn eco consumpt track</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-27d1f645-10a5-4ef3-8d5e-044f94b651f6')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-27d1f645-10a5-4ef3-8d5e-044f94b651f6 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-27d1f645-10a5-4ef3-8d5e-044f94b651f6');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-90e982e6-06ff-4e32-9611-0a2232dd8bfd\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-90e982e6-06ff-4e32-9611-0a2232dd8bfd')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-90e982e6-06ff-4e32-9611-0a2232dd8bfd button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "patent_df",
              "summary": "{\n  \"name\": \"patent_df\",\n  \"rows\": 100,\n  \"fields\": [\n    {\n      \"column\": \"appln_id\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 29,\n        \"min\": 1,\n        \"max\": 100,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          84,\n          54,\n          71\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"cpc_tech_code\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 10,\n        \"samples\": [\n          \"A01B\",\n          \"H01L\",\n          \"G01N\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 100,\n        \"samples\": [\n          \"Control system for smart thermostat\",\n          \"An improved technique for AI-powered energy\",\n          \"System for analytics dashboard\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"p_text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 100,\n        \"samples\": [\n          \"control system smart thermostat\",\n          \"improv techniqu ai power energi\",\n          \"system analyt dashboard\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Searching HDB bigrams in patent texts\n",
        "# -------------------------------------\n",
        "\n",
        "# Create a new DataFrame to store the results\n",
        "results = []\n",
        "\n",
        "# Iterate over each row in hdb_bigram_df\n",
        "for idx, row in hdb_bigram_df.iterrows():\n",
        "    bigram = row['bigram']\n",
        "\n",
        "    # Search for the bigram in p_texts\n",
        "    matched_patents = patent_df[patent_df['p_text'].str.contains(rf'\\b{bigram}\\b', regex=True)]\n",
        "\n",
        "    # If matches found, append to results with matched patent info\n",
        "    for _, patent_row in matched_patents.iterrows():\n",
        "        merged_row = row.to_dict()\n",
        "        merged_row['appln_id'] = patent_row['appln_id']\n",
        "        merged_row['cpc_tech_code'] = patent_row['cpc_tech_code']\n",
        "        merged_row['p_text'] = patent_row['p_text']\n",
        "        results.append(merged_row)\n",
        "\n",
        "# Create final DataFrame\n",
        "matched_df = pd.DataFrame(results)\n",
        "print(matched_df.head())"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gNTafJkfOSOI",
        "outputId": "ed600ed5-ed1e-409f-ecd3-fc0f0ddf644e"
      },
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "   reference                             description  \\\n",
            "0      69882  AI-powered energy forecasting software   \n",
            "1      69882  AI-powered energy forecasting software   \n",
            "2      69882  AI-powered energy forecasting software   \n",
            "3      69882  AI-powered energy forecasting software   \n",
            "4      69882  AI-powered energy forecasting software   \n",
            "\n",
            "                      p_description Nice_subclass  bigram_id           bigram  \\\n",
            "0  ai power energi forecast softwar    9_3/6_0.15          0         ai power   \n",
            "1  ai power energi forecast softwar    9_3/6_0.15          1     power energi   \n",
            "2  ai power energi forecast softwar    9_3/6_0.15          2  energi forecast   \n",
            "3  ai power energi forecast softwar    9_3/6_0.15          2  energi forecast   \n",
            "4  ai power energi forecast softwar    9_3/6_0.15          2  energi forecast   \n",
            "\n",
            "   appln_id cpc_tech_code                                    p_text  \n",
            "0        54          B65D           improv techniqu ai power energi  \n",
            "1        54          B65D           improv techniqu ai power energi  \n",
            "2        22          E21B            novel approach energi forecast  \n",
            "3        34          Y10S           uniqu framework energi forecast  \n",
            "4        82          E21B  real time monitor system energi forecast  \n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 4. Estimating z-scores between CPC codes and Nice subclasses\n"
      ],
      "metadata": {
        "id": "Dekf3lws-kNV"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Calculating how often cpc codes and Nice subclasses co-occure based on the bigram search.\n",
        "# That is Oij as defined in Equation 1 of the manuscript\n",
        "# -------------------------------------\n",
        "\n",
        "# Get all unique values\n",
        "all_cpc = matched_df['cpc_tech_code'].unique()\n",
        "all_nice = matched_df['Nice_subclass'].unique()\n",
        "\n",
        "# Create a DataFrame with all combinations\n",
        "all_combinations = pd.MultiIndex.from_product(\n",
        "    [all_cpc, all_nice],\n",
        "    names=['cpc_tech_code', 'Nice_subclass']\n",
        ").to_frame(index=False)\n",
        "\n",
        "# Group actual co-occurrences\n",
        "co_occurrence_df = matched_df.groupby(['cpc_tech_code', 'Nice_subclass']).size().reset_index(name='Oij')\n",
        "\n",
        "# Merge and fill missing counts with 0\n",
        "cooccurrence_df = all_combinations.merge(co_occurrence_df, on=['cpc_tech_code', 'Nice_subclass'], how='left')\n",
        "cooccurrence_df['Oij'] = cooccurrence_df['Oij'].fillna(0).astype(int)"
      ],
      "metadata": {
        "id": "lK93rPNy-m40"
      },
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Calculating ni as defined in Equation 2 of the manuscript\n",
        "# -------------------------------------\n",
        "\n",
        "# Count the number of patents with the CPC technology code\n",
        "cpc_counts = patent_df['cpc_tech_code'].value_counts().to_dict()\n",
        "\n",
        "# Map the counts to cooccurrence_df as new column 'ni'\n",
        "cooccurrence_df['ni'] = cooccurrence_df['cpc_tech_code'].map(cpc_counts).fillna(0).astype(int)"
      ],
      "metadata": {
        "id": "UpFTqteFuxSx"
      },
      "execution_count": 21,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Assuming `matched_df` is your DataFrame\n",
        "\n",
        "\n",
        "print(unique_counts)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "xVlX4-bEG_05",
        "outputId": "d95dc7e1-6045-4e6b-ed94-7c34d0248963"
      },
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "  Nice_subclass  unique_appln_id_count\n",
            "0    9_1/6_0.40                     31\n",
            "1    9_2/6_0.15                     20\n",
            "2    9_3/6_0.15                     11\n",
            "3    9_4/6_0.05                      7\n",
            "4    9_5/6_0.10                     12\n",
            "5    9_6/6_0.15                     20\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Calculating nj as defined in Equation 2 of the manuscript\n",
        "# -------------------------------------\n",
        "\n",
        "# Count the number of patents that include at least one bigram of the Nice subclass j\n",
        "Nice_counts = (\n",
        "    matched_df[['Nice_subclass', 'appln_id']]\n",
        "    .drop_duplicates()\n",
        "    .groupby('Nice_subclass')['appln_id']\n",
        "    .nunique()\n",
        "    .reset_index(name='unique_appln_id_count')\n",
        ")\n",
        "\n",
        "nice_count_series = Nice_counts.set_index('Nice_subclass')['unique_appln_id_count']\n",
        "cooccurrence_df['nj'] = cooccurrence_df['Nice_subclass'].map(nice_count_series).fillna(0).astype(int)\n",
        "cooccurrence_df.head()"
      ],
      "metadata": {
        "id": "I2Z_Qyqovi_k",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "outputId": "fac65379-d78c-4164-9c46-5382f0ab95ca"
      },
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "  cpc_tech_code Nice_subclass  Oij  ni  nj\n",
              "0          B65D    9_3/6_0.15    3   4  11\n",
              "1          B65D    9_2/6_0.15    2   4  20\n",
              "2          B65D    9_1/6_0.40    0   4  31\n",
              "3          B65D    9_6/6_0.15    0   4  20\n",
              "4          B65D    9_4/6_0.05    0   4   7"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-697852a1-d543-4bce-92d8-7bf20ebe2710\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>cpc_tech_code</th>\n",
              "      <th>Nice_subclass</th>\n",
              "      <th>Oij</th>\n",
              "      <th>ni</th>\n",
              "      <th>nj</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_3/6_0.15</td>\n",
              "      <td>3</td>\n",
              "      <td>4</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_2/6_0.15</td>\n",
              "      <td>2</td>\n",
              "      <td>4</td>\n",
              "      <td>20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_1/6_0.40</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>31</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_6/6_0.15</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_4/6_0.05</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>7</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-697852a1-d543-4bce-92d8-7bf20ebe2710')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-697852a1-d543-4bce-92d8-7bf20ebe2710 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-697852a1-d543-4bce-92d8-7bf20ebe2710');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-66197902-ef4e-4754-baf4-4fb77cf85397\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-66197902-ef4e-4754-baf4-4fb77cf85397')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-66197902-ef4e-4754-baf4-4fb77cf85397 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "cooccurrence_df",
              "summary": "{\n  \"name\": \"cooccurrence_df\",\n  \"rows\": 60,\n  \"fields\": [\n    {\n      \"column\": \"cpc_tech_code\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 10,\n        \"samples\": [\n          \"C07D\",\n          \"E21B\",\n          \"C25B\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Nice_subclass\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"9_3/6_0.15\",\n          \"9_2/6_0.15\",\n          \"9_5/6_0.10\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Oij\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1,\n        \"min\": 0,\n        \"max\": 7,\n        \"num_unique_values\": 8,\n        \"samples\": [\n          2,\n          1,\n          3\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"ni\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 4,\n        \"min\": 4,\n        \"max\": 18,\n        \"num_unique_values\": 7,\n        \"samples\": [\n          4,\n          18,\n          16\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"nj\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 7,\n        \"min\": 7,\n        \"max\": 31,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          20,\n          12,\n          31\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 28
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Calculating Eij as defined in Equation 2 of the manuscript\n",
        "# -------------------------------------\n",
        "\n",
        "# Compute Eij as defined in Equation 2 of the manuscript\n",
        "N = patent_df.appln_id.nunique()\n",
        "cooccurrence_df['Eij'] = (cooccurrence_df['ni'] * cooccurrence_df['nj']) / N"
      ],
      "metadata": {
        "id": "6WgPmO39nd6W"
      },
      "execution_count": 29,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Compute sigma_ij as defined in Equation 1 of the manuscript\n",
        "# -------------------------------------\n",
        "cooccurrence_df['sigma_ij'] = (cooccurrence_df['Eij'] * (1 - (cooccurrence_df['ni'] / N)) * ((N - cooccurrence_df['nj']  ) / (N - 1))) ** 0.5"
      ],
      "metadata": {
        "id": "DXoNhM0jxXf2"
      },
      "execution_count": 30,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Compute Zij as defined in Equation 1 of the manuscript\n",
        "# -------------------------------------\n",
        "cooccurrence_df['Zij'] = (cooccurrence_df['Oij'] - cooccurrence_df['Eij'] )/cooccurrence_df['sigma_ij']\n",
        "cooccurrence_df.head()"
      ],
      "metadata": {
        "id": "cwM8BQiuxhZS",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "outputId": "0eb48cb1-c41a-4b0e-ff1e-7eea1b55f91c"
      },
      "execution_count": 31,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "  cpc_tech_code Nice_subclass  Oij  ni  nj   Eij  sigma_ij       Zij\n",
              "0          B65D    9_3/6_0.15    3   4  11  0.44  0.616225  4.154326\n",
              "1          B65D    9_2/6_0.15    2   4  20  0.80  0.787786  1.523257\n",
              "2          B65D    9_1/6_0.40    0   4  31  1.24  0.910864 -1.361345\n",
              "3          B65D    9_6/6_0.15    0   4  20  0.80  0.787786 -1.015505\n",
              "4          B65D    9_4/6_0.05    0   4   7  0.28  0.502503 -0.557211"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-f19740fd-49b6-4889-bf5c-0380133ec4b4\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>cpc_tech_code</th>\n",
              "      <th>Nice_subclass</th>\n",
              "      <th>Oij</th>\n",
              "      <th>ni</th>\n",
              "      <th>nj</th>\n",
              "      <th>Eij</th>\n",
              "      <th>sigma_ij</th>\n",
              "      <th>Zij</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_3/6_0.15</td>\n",
              "      <td>3</td>\n",
              "      <td>4</td>\n",
              "      <td>11</td>\n",
              "      <td>0.44</td>\n",
              "      <td>0.616225</td>\n",
              "      <td>4.154326</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_2/6_0.15</td>\n",
              "      <td>2</td>\n",
              "      <td>4</td>\n",
              "      <td>20</td>\n",
              "      <td>0.80</td>\n",
              "      <td>0.787786</td>\n",
              "      <td>1.523257</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_1/6_0.40</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>31</td>\n",
              "      <td>1.24</td>\n",
              "      <td>0.910864</td>\n",
              "      <td>-1.361345</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_6/6_0.15</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>20</td>\n",
              "      <td>0.80</td>\n",
              "      <td>0.787786</td>\n",
              "      <td>-1.015505</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>B65D</td>\n",
              "      <td>9_4/6_0.05</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>7</td>\n",
              "      <td>0.28</td>\n",
              "      <td>0.502503</td>\n",
              "      <td>-0.557211</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-f19740fd-49b6-4889-bf5c-0380133ec4b4')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-f19740fd-49b6-4889-bf5c-0380133ec4b4 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-f19740fd-49b6-4889-bf5c-0380133ec4b4');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-ed1b2981-dcd5-453e-8c51-42623b1bf4be\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-ed1b2981-dcd5-453e-8c51-42623b1bf4be')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-ed1b2981-dcd5-453e-8c51-42623b1bf4be button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "cooccurrence_df",
              "summary": "{\n  \"name\": \"cooccurrence_df\",\n  \"rows\": 60,\n  \"fields\": [\n    {\n      \"column\": \"cpc_tech_code\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 10,\n        \"samples\": [\n          \"C07D\",\n          \"E21B\",\n          \"C25B\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Nice_subclass\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"9_3/6_0.15\",\n          \"9_2/6_0.15\",\n          \"9_5/6_0.10\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Oij\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1,\n        \"min\": 0,\n        \"max\": 7,\n        \"num_unique_values\": 8,\n        \"samples\": [\n          2,\n          1,\n          3\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"ni\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 4,\n        \"min\": 4,\n        \"max\": 18,\n        \"num_unique_values\": 7,\n        \"samples\": [\n          4,\n          18,\n          16\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"nj\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 7,\n        \"min\": 7,\n        \"max\": 31,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          20,\n          12,\n          31\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Eij\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1.1104918236508903,\n        \"min\": 0.28,\n        \"max\": 5.58,\n        \"num_unique_values\": 35,\n        \"samples\": [\n          3.2,\n          0.91,\n          0.84\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"sigma_ij\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.283157056202126,\n        \"min\": 0.502502826767264,\n        \"max\": 1.785792413875293,\n        \"num_unique_values\": 35,\n        \"samples\": [\n          1.4738117967098827,\n          0.8623909680754906,\n          0.8333066662399863\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Zij\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1.3150613149011126,\n        \"min\": -1.4670289407654773,\n        \"max\": 4.154326295115989,\n        \"num_unique_values\": 48,\n        \"samples\": [\n          3.836280287461775,\n          0.045144694907163496,\n          0.584949483816775\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 31
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 5. Creating the PAT2TM concordance\n",
        "A concordance can be constructed by identifying CPC class and Nice subclass pairs that demonstrate statistically significant co-occurrence. This involves selecting only those pairs with z-values above zero—serving as the default threshold.\n",
        "If desired, a higher threshold can be applied to highlight stronger associations. Once the threshold is set, the resulting PAT2TM concordance can be visualized as a network, with CPC classes and Nice subclasses depicted as nodes and their co-occurrence relationships represented as weighted edges."
      ],
      "metadata": {
        "id": "2gd17xPB-nXw"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# -------------------------------------\n",
        "# Creating and visulizing (like Figure 3 of the manuscript) the PAT2TM concordance based on a threshold value for Zij\n",
        "# -------------------------------------\n",
        "\n",
        "# Threshold for Zij\n",
        "threshold = 0\n",
        "\n",
        "# Initialize an empty graph\n",
        "B = nx.Graph()\n",
        "\n",
        "# Extract unique CPC and Nice subclass nodes\n",
        "cpc_nodes = cooccurrence_df['cpc_tech_code'].unique().tolist()\n",
        "nice_nodes = cooccurrence_df['Nice_subclass'].unique().tolist()\n",
        "\n",
        "# Add nodes with different sets\n",
        "B.add_nodes_from(cpc_nodes, bipartite='cpc')\n",
        "B.add_nodes_from(nice_nodes, bipartite='nice')\n",
        "\n",
        "# Add edges only if Zij > threshold\n",
        "for _, row in cooccurrence_df.iterrows():\n",
        "    if row['Zij'] > threshold:\n",
        "        # Add edge with weight (you can choose which attribute to use, e.g., Zij or Eij)\n",
        "        B.add_edge(row['cpc_tech_code'], row['Nice_subclass'], weight=row['Zij'])\n",
        "\n",
        "# Create a bipartite layout (two sets separated horizontally)\n",
        "from networkx.algorithms import bipartite\n",
        "\n",
        "pos = dict()\n",
        "pos.update((node, (1, index)) for index, node in enumerate(cpc_nodes))\n",
        "pos.update((node, (2, index)) for index, node in enumerate(nice_nodes))\n",
        "\n",
        "# Now run your plotting code\n",
        "plt.figure(figsize=(7, 6))\n",
        "\n",
        "# Draw nodes\n",
        "nx.draw_networkx_nodes(B, pos, nodelist=cpc_nodes, node_color='red', node_size=400, alpha=0.9)\n",
        "nx.draw_networkx_nodes(B, pos, nodelist=nice_nodes, node_color='lightblue', node_size=400, alpha=0.9)\n",
        "\n",
        "# Draw edges with scaled widths\n",
        "edges = B.edges(data=True)\n",
        "weights = [edata['weight'] for _, _, edata in edges]\n",
        "\n",
        "if weights:\n",
        "    min_w, max_w = min(weights), max(weights)\n",
        "    scaled_weights = [1 + 4 * (w - min_w) / (max_w - min_w) if max_w > min_w else 3 for w in weights]\n",
        "    nx.draw_networkx_edges(B, pos, edge_color='gray', width=scaled_weights, alpha=0.4)\n",
        "\n",
        "# Draw labels\n",
        "nx.draw_networkx_labels(B, pos, font_size=9, font_color='black')\n",
        "\n",
        "# Custom text labels below groups\n",
        "plt.text(1, -1, 'CPC classes', fontsize=10, color='red', ha='center')\n",
        "plt.text(2, -1, 'Nice subclasses', fontsize=10, color='blue', ha='center')\n",
        "\n",
        "plt.axis('off')\n",
        "plt.title('Illustration of the PAT2TM concordance using the toy data', fontsize=12)\n",
        "plt.tight_layout()\n",
        "plt.show()\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 607
        },
        "id": "FpkPDyovd0Ig",
        "outputId": "68dbab1b-f11b-485f-9775-e3d570413880"
      },
      "execution_count": 32,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 700x600 with 1 Axes>"
            ],
            "image/png": "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h4aGoFKplJGcfPh8Ppxyyimw2WzK55dr2P7NN9/EKaecgmXLlkGv16OlpQWnnXYa3G638pxLLrkE3//+9wEAvb29GXYkAPjTn/6EQw45BC6XCzqdDrvuuituvvnmWbePqCxUUV2iTExM4LDDDkNTUxMuuOAC2O129PX14cEHHwSQGrq9+eabcfbZZ2PDhg344he/CADYY489lHUIgoB169bhgAMOwK9+9SsYjUYAqYt6JBLB2WefDafTiX//+9+44YYbMDQ0hPvuuw9Aqpo3MjKCZ555ZsbQby7eeecdrF69GlarFT/4wQ+g0Wjwu9/9DgcddBBeeOEF7LvvvhnPP++889DQ0ICLL74YfX19uO666/DNb34T995776zvs2nTJhx++OFYtmwZLrnkEkSjUdxwww3Yf//98dprr6GnpwdnnXUW2tvbceWVV+L888/Hpz71KTQ3N+dc34EHHojzzz8f119/PX70ox9h1apVAKD8FwA++ugjHHvssTj99NNx8skn49Zbb8Upp5yCvffeG7vtthuAlA1jzZo1GB4exllnnYWuri5s2bIFF154IUZHR3HdddcV/AxzsX37dqhUKqUyPDIygueffx633347gJQgvPbaa/Gb3/wGWq12Tu+RzdjYGBobG+e1jp6eHnzmM5/BX/7yFxx++OEAUoLT7/fj+OOPx/XXX1/Uem677Tacdtpp2G233XDhhRfCbrfj9ddfx9/+9jdF8N5222049dRT8alPfQpXXXUVxsfH8b//+7946aWX8Prrr2dU1UVRxLp167DvvvviV7/6FTZt2oRf//rXWL58Oc4++2zleaeffjpuu+02HH744TjjjDMgCAL+8Y9/4OWXX8Y+++wDADjjjDNw++2349hjj8V3v/td/Otf/8JVV12FrVu34qGHHsrYj/fffx8nnHACzjrrLJx55plYsWIFotEo1q5di4GBAZx//vloa2vDn//8Zzz33HMzPodifrMLsY9XXHEFfvKTn+BLX/oSzjjjDExOTuKGG27AgQceOOOznSvvvPMOjjzySOyxxx742c9+Bp1Oh48++ggvvfRSwdcWs6+SJOGoo47Cv//9b5x99tlYuXIlHn74YZx88skF118N54frrrsO5513XobdRj6fjY+P47Of/SwikQjOP/98OJ1O3H777Tj66KNx//33Y8OGDTCbzdiwYQPuvfdeXHPNNVCpVMq6//KXv4AxphQxcsEYwxe+8AW8+OKL+MY3voFVq1bhoYceyvn5PfPMM9i+fTtOPfVUtLS04J133sHvf/97vPPOO3j55ZfBcRy++MUv4oMPPsBf/vIXXHvttcq5Ri683Hzzzdhtt91w9NFHQ61W49FHH8U555wDSZJw7rnnFvzOiArAiKrkT3/6EwPA/vOf/yjLLr74Ypb9lXV3d7OTTz551uekr2/Hjh2MMcYeeuihGevPZnJykgFgF1988YzHTj75ZAaAXXDBBTMei0QiM5ZdddVVjOM41t/fryw799xzc24rY2zG+x5zzDFMq9Wybdu2KctGRkaYxWJhBx544Iz9PPTQQ5kkScry73znO0ylUjGfz5d3fxljbM8992Qul4u53W5l2RtvvMF4nmdf+9rXlGXPP/88A8Duu+++WdfHGGP33XcfA8Cef/75GY91d3czAGzz5s3KsomJCabT6dh3v/tdZdlll13GTCYT++CDDzJef8EFFzCVSsUGBgZm3YY1a9awlStXssnJSTY5Ocm2bt3Kzj//fAaAHXXUUcrzfvWrXzGDwcACgQBjjLEPPviAAWAPPfRQzvWuX7+edXd3F/gEPmbz5s2M4zj2k5/8JO9zdtttN7ZmzZqcj6X/Ln7zm98wi8WiHG/HHXccO/jggxljqc91/fr1s26Lz+djFouF7bvvviwajWY8Jh87iUSCuVwutvvuu2c857HHHmMA2E9/+lNlmfyb+NnPfpaxrk9+8pNs7733Vv793HPPMQDs/PPPn7FN8vv+97//ZQDYGWeckfH49773PQaAPffcc8oy+Rj629/+lvHc6667jgFg//d//6csC4fDbKeddppxPBb7my3nPvb19TGVSsWuuOKKjMffeustplarZyzP5uSTT8557GWfA6+99loGgE1OTuZd144dOxgA9qc//ankfX3ggQcYAHbdddcpy0RRZIcccsiMdeaiGs4P+X5z3/72txkA9o9//ENZFgwGWW9vL+vp6WGiKDLGGHvqqacYAPbkk09mvH6PPfbI+1uW+etf/8oAsKuvvlpZJggCW7169YzPL9dx+pe//GXGZ/TLX/4y43qXTq51rFu3ji1btmzW7SQqBw39L1HkSsVjjz2GZDI55/WkV1Bk0r1x4XAYU1NT+OxnPwvGGF5//fWS30MURTz99NM45phjsGzZMmV5a2srTjzxRLz44osIBAIZr/n617+eMfy3evVqiKKI/v7+vO8zOjqK//73vzjllFPgcDiU5XvssQc+97nP4Yknnih524th1113xerVq5V/NzU1YcWKFdi+fbuy7L777sPq1avR0NCAqakp5e/QQw+FKIrYvHlzwfd577330NTUhKamJqxatQo33HAD1q9fj1tvvVV5zl133YX169fDYrEAAHbeeWfsvffecx7+T2diYgInnngient78YMf/GDe6/vSl76EaDSKxx57DMFgEI899lhJw/7PPPMMgsEgLrjgghn+RPnYeeWVVzAxMYFzzjkn4znr16/HypUrM4ZAZb7xjW9k/Hv16tUZ3+UDDzwAjuNw8cUXz3it/L7ysfb//t//y3j8u9/9LgDMeN/e3l6sW7cuY9kTTzyB1tZWHHvsscoyo9GIr3/96zPet9TfbDn28cEHH4QkSfjSl76UcUy3tLRg5513xvPPPz/jtXNBPtc9/PDDc7LJFNrXv/3tb9BoNDjzzDOVZTzPl606t1jnh1w88cQT+PSnP53RtGg2m/H1r38dfX19ePfddwEAhx56KNra2jLOE2+//TbefPPNWb3m8nuo1eqMa4lKpcJ5550347npx2ksFsPU1BT2228/AMBrr71W1D6lr8Pv92Nqagpr1qzB9u3b4ff7i1oHsbjQ0P8SZc2aNdi4cSMuvfRSXHvttTjooINwzDHH4MQTTyy6Y1qtVqOjo2PG8oGBAfz0pz/FI488Aq/Xm/HYXE4Ek5OTiEQiWLFixYzHVq1aBUmSMDg4qAyDAUBXV1fG8xoaGgBgxvakI4vYfO/z1FNPlbVhTCZ7W4HU9qZv64cffog333xTGb7KRm7umo2enh7ccsstSuPIzjvvDJfLpTy+detWvP766/ja176Gjz76SFl+0EEH4cYbb0QgEIDVai1l1xTC4TCOPPJIBINBvPjiizO8q3OhqakJhx56KO6++25EIhGIopghygqxbds2AMDuu++e9zmzHRMrV66cEZElezHTyf4ut23bhra2toyboVzvy/M8dtppp4zlLS0tsNvtM264ent7c65jp512muHXzLUvpfxmy7WPH374IRhj2HnnnXM+Xq4O/C9/+cv4wx/+gDPOOAMXXHAB1q5diy9+8Ys49thjwfOz12qK2df+/n60trYq1ieZ7O9urizW+SEX/f39M2xVwMfWhP7+fuy+++7geR5f+cpXcPPNNyMSicBoNOKuu+6CXq9XPLizvUdra+uMc0Ku49Tj8eDSSy/FPffcM2Ofir22vPTSS7j44ovxz3/+E5FIZMY6bDZbUeshFg8SqnVGrkYqADPM/xzH4f7778fLL7+MRx99FE899RROO+00/PrXv8bLL79clJDQ6XQzTvSiKOJzn/scPB4PfvjDH2LlypUwmUwYHh7GKaecMufGn1JJ90mlwxhblPcvhWK2VZIkfO5zn8tbidxll10Kvo/JZMKhhx6a9/E777wTAPCd73wH3/nOd2Y8/sADD+DUU08t+D7ZJBIJfPGLX8Sbb76Jp556alZhWConnngizjzzTIyNjeHwww+veApDvu9yruT7PWcznw7/Un+z5dpHSZLAcRyefPLJnOssdA4q9lxnMBiwefNmPP/883j88cfxt7/9Dffeey8OOeQQPP3007PuT7m/z7mwWOeH+fK1r30Nv/zlL/HXv/4VJ5xwAu6++24ceeSRZRV+X/rSl7BlyxZ8//vfx5577gmz2QxJkvD5z3++qGvLtm3bsHbtWqxcuRLXXHMNOjs7odVq8cQTT+Daa69dtOsTURokVOsMuXLo8/kyLtr5hrz3228/7Lfffrjiiitw99134ytf+QruuecenHHGGUVfJNN566238MEHH+D222/H1772NWV5ene2TLHrb2pqgtFoxPvvvz/jsffeew88z6Ozs7Pkbc1GDuzP9z6NjY1zqqbO5XPMZvny5QiFQrMKzfnAGMPdd9+Ngw8+GOecc86Mxy+77DLcddddJQtVSZLwta99Dc8++yz+7//+T0lLKBcbNmzAWWedhZdffrlgo1w2y5cvB5AaosxX/Uo/Jg455JCMx95///28kzwUet+nnnoKHo8nb8Wxu7sbkiThww8/zGisGR8fh8/nK+p9u7u78fbbb4MxlnEMZh/fpfxmi6WYfVy+fDkYY+jt7Z2TkGpoaMjZGZ7rXMfzPNauXYu1a9fimmuuwZVXXomLLroIzz///Lx/U93d3Xj++eeVSqJM+qjEbFTD+SHfNnR3d+c9H8qPy+y+++745Cc/ibvuugsdHR0YGBjADTfcUPC9u7u78eyzzyIUCmXcnGS/r9frxbPPPotLL70UP/3pT5XlH374YdH78+ijjyIej+ORRx7JqFSXy2ZCLAzkUa0z5ItvuicpHA4rXdwyXq93RnVxzz33BAAlvkY+6ZYyu4d895++bsYY/vd//3fGc2XRV2j9KpUKhx12GB5++OGMeK3x8XEl9H2uQ9LptLa2Ys8998Ttt9+esU1vv/02nn76aRxxxBFzWm+x+zkbX/rSl/DPf/4TTz311IzHfD4fBEGY87qB1HBYX18fTj31VBx77LEz/r785S/j+eefx8jISEnrPe+883DvvffipptuUpIjyonZbMbNN9+MSy65BEcddVRJrz3ssMNgsVhw1VVXIRaLZTwmH7/77LMPXC4Xfvvb32bEOj355JPYunUr1q9fX/I2b9y4EYwxZTKNXO8rH2vZ3drXXHMNABT1vkcccQRGRkZw//33K8sikQh+//vfZzyvlN9ssRSzj1/84hehUqlw6aWXzjgXMcYyIodysXz5cvj9frz55pvKstHR0RmJCB6PZ8Zrs89182HdunVIJpO45ZZblGWSJCnxe4WohvODyWTK+f5HHHEE/v3vf+Of//ynsiwcDuP3v/89enp6sOuuu2Y8/6STTsLTTz+N6667Dk6nU0nkmI0jjjgCgiBkRESJojhD5OY6ToGZvxF5f4CZn2mudfj9fvzpT38quJ1E5aCKap1x2GGHoaurC6effjq+//3vQ6VS4dZbb0VTUxMGBgaU591+++246aabsGHDBixfvhzBYBC33HILrFarcpE0GAzYddddce+992KXXXaBw+HA7rvvPuvQ7cqVK7F8+XJ873vfw/DwMKxWKx544IGc3tC9994bAHD++edj3bp1UKlUOP7443Ou9/LLL1eyEM855xyo1Wr87ne/Qzwex9VXXz2fjyyDX/7ylzj88MPxmc98BqeffroST2Wz2eY83euee+4JlUqFX/ziF/D7/dDpdEqOX7F8//vfxyOPPIIjjzxSiaYJh8N46623cP/996Ovr29ekU933XUXVCpVXgF09NFH46KLLsI999wzo8EnH9dddx1uuukmfOYzn4HRaFSsBTIbNmwoi9+3mBigXFitVlx77bU444wz8KlPfQonnngiGhoa8MYbbyASieD222+HRqPBL37xC5x66qlYs2YNTjjhBCWeqqenJ6dFohAHH3wwTjrpJFx//fX48MMPlWHLf/zjHzj44IPxzW9+E//zP/+Dk08+Gb///e/h8/mwZs0a/Pvf/8btt9+O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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# End"
      ],
      "metadata": {
        "id": "R2tyGRKa-pYI"
      }
    }
  ]
}